package cn.ld.module.ai.service.model;

import cn.ld.framework.common.pojo.PageResult;
import cn.ld.module.ai.controller.admin.model.vo.chatRole.AiChatRolePageInVO;
import cn.ld.module.ai.controller.admin.model.vo.chatRole.AiChatRoleSaveMyInVO;
import cn.ld.module.ai.controller.admin.model.vo.chatRole.AiChatRoleSaveInVO;
import cn.ld.module.ai.dal.entity.model.AiChatRoleEntity;
import jakarta.validation.Valid;

import java.util.Collection;
import java.util.List;
import java.util.Map;

import static cn.ld.framework.common.util.collection.CollectionUtils.convertMap;

/**
 * AI 聊天角色 Service 接口
 *
 * @author fansili
 */
public interface AiChatRoleService {

    /**
     * 创建聊天角色
     *
     * @param createInVO 创建信息
     * @return 编号
     */
    Long createChatRole(@Valid AiChatRoleSaveInVO createInVO);

    /**
     * 创建【我的】聊天角色
     *
     * @param createInVO 创建信息
     * @param userId 用户编号
     * @return 编号
     */
    Long createChatRoleMy(AiChatRoleSaveMyInVO createInVO, Long userId);

    /**
     * 更新聊天角色
     *
     * @param updateInVO 更新信息
     */
    void updateChatRole(@Valid AiChatRoleSaveInVO updateInVO);

    /**
     * 创建【我的】聊天角色
     *
     * @param updateInVO 更新信息
     * @param userId 用户编号
     */
    void updateChatRoleMy(AiChatRoleSaveMyInVO updateInVO, Long userId);

    /**
     * 删除聊天角色
     *
     * @param id 编号
     */
    void deleteChatRole(Long id);

    /**
     * 删除【我的】聊天角色
     *
     * @param id 编号
     * @param userId 用户编号
     */
    void deleteChatRoleMy(Long id, Long userId);

    /**
     * 获得聊天角色
     *
     * @param id 编号
     * @return AI 聊天角色
     */
    AiChatRoleEntity getChatRole(Long id);

    /**
     * 获得聊天角色列表
     *
     * @param ids 编号数组
     * @return 聊天角色列表
     */
    List<AiChatRoleEntity> getChatRoleList(Collection<Long> ids);

    default Map<Long, AiChatRoleEntity> getChatRoleMap(Collection<Long> ids) {
        return convertMap(getChatRoleList(ids), AiChatRoleEntity::getId);
    }

    /**
     * 校验聊天角色是否合法
     *
     * @param id 角色编号
     */
    AiChatRoleEntity validateChatRole(Long id);

    /**
     * 获得聊天角色分页
     *
     * @param pageInVO 分页查询
     * @return 聊天角色分页
     */
    PageResult<AiChatRoleEntity> getChatRolePage(AiChatRolePageInVO pageInVO);

    /**
     * 获得【我的】聊天角色分页
     *
     * @param pageInVO 分页查询
     * @param userId 用户编号
     * @return 聊天角色分页
     */
    PageResult<AiChatRoleEntity> getChatRoleMyPage(AiChatRolePageInVO pageInVO, Long userId);

    /**
     * 获得聊天角色的分类列表
     *
     * @return 分类列表
     */
    List<String> getChatRoleCategoryList();

    /**
     * 根据名字获得聊天角色
     *
     * @param name 名字
     * @return 聊天角色列表
     */
    List<AiChatRoleEntity> getChatRoleListByName(String name);

}